You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
Constraints:
1 <= n <= 45
#include <stdio.h>
int climbStairs(int n) {
// 特殊情況,若 n 為 1,則只有一種方法
if (n == 1) return 1;
int dp1 = 1; // dp[1]
int dp2 = 2; // dp[2]
// 使用滾動變量計算 dp[i],避免使用額外陣列
for (int i = 3; i <= n; i++) {
int current = dp1 + dp2;
dp1 = dp2; // 更新 dp1 為上一階的方法數
dp2 = current; // 更新 dp2 為當前階的方法數
}
return dp2; // 最終返回 dp[n]
}
#include <stdio.h>
int climbStairs(int n) {
// 特殊情況,若 n 為 1,則只有一種方法
if (n == 1) return 1;
int dp1 = 1; // dp[1]
int dp2 = 2; // dp[2]
// 使用滾動變量計算 dp[i],避免使用額外陣列
for (int i = 3; i <= n; i++) {
int current = dp1 + dp2;
dp1 = dp2; // 更新 dp1 為上一階的方法數
dp2 = current; // 更新 dp2 為當前階的方法數
}
return dp2; // 最終返回 dp[n]
}
int main() {
// 範例1
int n1 = 2;
printf("Output for n=%d: %d\n", n1, climbStairs(n1)); // 輸出: 2
// 範例2
int n2 = 3;
printf("Output for n=%d: %d\n", n2, climbStairs(n2)); // 輸出: 3
// 範例3
int n3 = 5;
printf("Output for n=%d: %d\n", n3, climbStairs(n3)); // 輸出: 8
return 0;
}